﻿//
// ParallelGrep
//
// Copyright (C) 2011 - Tatsuya Niioka
//
using System.Windows.Media;
using System.Text.RegularExpressions;

using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Rendering;

namespace ParallelGrep.ViewModel
{
    /// <summary>
    /// 正規表現ドキュメントカラーライズトランスファー
    /// </summary>
    public class RegexDocumentColorizingTransformer : DocumentColorizingTransformer
    {
        private Regex m_regex = null;

        #region Constrcutor
        /// <summary>
        /// 指定した正規表現で、新しい<see cref="RegexDocumentColorizingTransformer"/>クラスを生成します。
        /// </summary>
        /// <param name="regex"></param>
        public RegexDocumentColorizingTransformer(Regex regex)
        {
            m_regex = regex;
        }
        #endregion

        #region ColorizeLine
        /// <summary>
        /// 指定したライン情報で、カラーライズラインを実行します。
        /// </summary>
        /// <param name="line">ライン情報</param>
        protected override void ColorizeLine(DocumentLine line)
        {
            string text = CurrentContext.Document.GetText(line);
            MatchCollection matches = m_regex.Matches(text);
            foreach (Match match in matches)
            {
                base.ChangeLinePart(
                    line.Offset + match.Index,
                    line.Offset + match.Index + match.Length,
                    (VisualLineElement element) =>
                    {
                        //#FF3399FF
                        element.TextRunProperties.SetBackgroundBrush(Brushes.LightBlue);

                        /*
                        Typeface tf = element.TextRunProperties.Typeface;
                        element.TextRunProperties.SetTypeface(new Typeface(
                            tf.FontFamily,
                            FontStyles.Italic,
                            FontWeights.Bold,
                            tf.Stretch
                        ));
                         */
                    });
            }
        }
        #endregion
    }
}